package com.yuwen.yuwenRPC.proxy;

/**
 * @ClassNameServiceProxyFactory
 * @Description TODO
 * @Author钰玟
 * @Date2025/3/29 下午10:27
 * @Version 1.0
 **/

import com.yuwen.RpcApplication;
import java.lang.reflect.Proxy;

/**
 * 服务代理工厂
 */
public class ServiceProxyFactory {

    /**
     * 创建代理对象的工厂
     * @param serviceClass 代理的服务接口的 类
     * @return 代理对象
     * @param <T> interface
     */
    public static <T> T getProxy(Class<T> serviceClass) {
        //如果开启了 mock 模式则使用 mock
        if (RpcApplication.getRpcConfig().isMock()){
            return getMockProxy(serviceClass);
        }
        //没有则默认
        return (T) Proxy.newProxyInstance(
                serviceClass.getClassLoader(),
                new Class[] {serviceClass},
                new ServiceProxy()
        );
    }

    /**
     * mock 动态代理
     * @param serviceClass 代理的服务接口的 类
     * @return 代理对象
     * @param <T> interface
     */
    public static <T> T getMockProxy (Class<T> serviceClass) {
        return (T) Proxy.newProxyInstance(
                serviceClass.getClassLoader(),
                new Class[] {serviceClass},
                new MockServiceProxy()
        );
    }

}
